"""
author: liuxu
date: 2024.12.3
description:
    此脚本用于自动化执行全量测试用例并生成Allure测试报告。
    主要功能包括：
    1. 运行指定的pytest测试用例
    2. 生成 Allure 格式的测试结果
    3. 将结果转换为 HTML 报告
    4. 在 Windows 系统上自动打开报告
"""
import pytest
import os
import subprocess
from setting import PROJECT_ROOT


# 设置Allure报告的输出目录
allure_report_dir = "allure_results"
# 生成HTML格式的Allure报告
allure_html_dir = "allure_report"

def check_allure_installed():
    """检查Allure是否已安装"""
    try:
        subprocess.run(["allure", "--version"], capture_output=True, check=True)
        return True
    except (subprocess.CalledProcessError, FileNotFoundError):
        return False

def run_all_tests():
    # 调用pytest的main函数来运行测试用例，并指定相关参数
    pytest_args = [
        "-v",  # 详细输出模式
        "-k not (TestSQTT or TestSqttBugCase or TestCodeobjAnalyze)",  # dtk-25.04.2不支持，暂时屏蔽
        "--timeout=300",  # 设置每条用例超时时间为5min
        "--alluredir", allure_report_dir,  # 指定Allure报告的生成目录
        "--clean-alluredir"
    ]
    pytest.main(pytest_args)

    # 先检查Allure是否安装
    if not check_allure_installed():
        print("Error: The Allure command is unavailable. Please check if the Allure tool is installed properly")
        return -1
    os.makedirs(allure_html_dir, exist_ok=True)
    res = subprocess.run(["allure", "generate", allure_report_dir, "-o", allure_html_dir, "--clean"])
    return res.returncode

def main():
    if os.name == 'nt':
        # 在浏览器中打开HTML报告
        html_report_path = os.path.join(PROJECT_ROOT, f"{allure_html_dir}")
        subprocess.run(["allure", "open", html_report_path], shell=True)
    elif os.name == 'posix':
        run_all_tests()
        # f"将{allure_report_dir}下载至windows打开"
        pass


if __name__ == "__main__":
    main()
